package Stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.stream.Stream;

public class demo3 {
    public static void main(String[] args) {
        /*
        单列集合      default Stream<E> stream()                           Collection中的默认方法
        双列集合      无                                                   无法直接使用stream流
        数组          public static <T> Stream<T> stream(T[] array)        Arrays工具类中的静态方法
        一堆零散数据   public static<T> Stream<T> of(T... values)           Stream接口中的静态方法
*/
        //使用单列集合创建stream流
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"aaa","bbb","ccc");
        list.stream().forEach(s->System.out.println(s));
        System.out.println("----------------------");
        //使用双列集合创建stream流
        HashMap<String,Integer> hm = new HashMap<>();
        hm.put("aaa",1);
        hm.put("bbb",2);
        hm.put("ccc",3);
        //第一种获取stream流
        //先获取一个键值对对象，把键值对对象放到了stream流，这里的s相当于每一个键值对对象
        hm.entrySet().stream().forEach(s-> System.out.println(s));
        //第二种获取stream流
        //先获取所有的键，把键放在stream流，这里的s相当于每一个键
        hm.keySet().stream().forEach(s-> System.out.println(s));
        System.out.println("----------------------");
        //使用数组创建stream流
        int []arr1 = {1,2,3,4,5};
        Arrays.stream(arr1).forEach(s-> System.out.print(s+" "));
        System.out.println();
        String[] arr2 = {"aaa","bbb","ccc"};
        Arrays.stream(arr2).forEach(s-> System.out.print(s+" "));
        System.out.println();

        //注意：
        //Stream接口中静态方法of的细节
        //方法的形参是一个可变参数，可以传递一堆零散的数据，也可以传递数组
        //但是数组必须是引用数据类型的，如果传递基本数据类型，是会把整个数组当做一个元素，放到Stream当中。
        Stream.of(arr1).forEach(s-> System.out.println(s+" "));//[I@30dae81
        Stream.of(arr2).forEach(s-> System.out.println(s+" "));

        System.out.println("----------------------");
        //使用一堆零散数据创建stream流
        Stream.of(1,2,3,4,5).forEach(s-> System.out.print(s+" "));
        Stream.of("a","b","c","d","e").forEach(s-> System.out.print(s+" "));
    }
}
